package com.example.book.service;

//import com.example.book.dao.BookDao;
import com.example.book.enums.BookStatus;
import com.example.book.mapper.BookMapper;
import com.example.book.model.BookInfo;
import com.example.book.model.PageRequest;
import com.example.book.model.PageResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Hua YY
 * Date: 2024-11-15
 * Time: 11:32
 */

@Component
public class BookService {
//    @Autowired
//    private BookDao bookDao;//注入依赖

    @Autowired
    private BookMapper bookMapper;


//    @Deprecated
//    public List<BookInfo> getBookList(){
//        //BookDao bookDao = new BookDao();
//        List<BookInfo> bookInfos = bookDao.mockData();
//        for(BookInfo bookInfo : bookInfos){
//            if(bookInfo.getStatus() == 2){
//                bookInfo.setStatusCN("不可借阅");
//            }else{
//                bookInfo.setStatusCN("可借阅");
//            }
//        }
//        return bookInfos;
//    }


    public Integer insertBook(BookInfo bookInfo) {
        return bookMapper.insertBook(bookInfo);
    }

//    public PageResult<BookInfo> getBookListByPage(PageRequest pageRequest) {
    public PageResult<BookInfo> getBookListByPage(PageRequest pageRequest) {

//        好神奇，写到这完美闭环，每次写都感觉很奇妙
//        我们只返回List<BookInfo>是不够的，还需要返回count才可以
//        1:返回图书信息

        List<BookInfo> bookInfos = bookMapper.queryBookByPage(pageRequest.getOffset(),pageRequest.getPageSize());
//        2:返回总页数
//        我们还是用一个对象来进行传参
//        修改本方法的返回类型，在修改Controller层的
        Integer count = bookMapper.count();

//        3:处理状态
//        使用枚举类来处理
//        状态有三种  0-删除  1 - 可借阅  2 -  不可借阅
        for(BookInfo bookInfo : bookInfos){
//            从外往里渗入：从遍历的每本书中获取状态Status值，从枚举类中调用静态方法传入状态值，获取到状态信息，最后在设置每本书的状态信息
            bookInfo.setStatusCN(BookStatus.getDescByCode(bookInfo.getStatus()).getDesc());
        }

//            if(bookInfo.getStatus() == 2){
//                bookInfo.setStatusCN("不可借阅");
//            }else if(bookInfo.getStatus() == 0){
//                bookInfo.setStatusCN("删除");
//            }else{
//                bookInfo.setStatusCN("可借阅");
//            }
        return new PageResult(bookInfos,count,pageRequest);
    }

    /*
    *   根据Id查询图书信息
    *   @param bookId
    *   @return  */
    public BookInfo queryBookById(Integer bookId) {
        BookInfo bookInfo = bookMapper.queryBookById(bookId);
//        绝了，从这里体会到了这个接口写的NB，前端传id，获取图书，获取状态，通过状态获取CN，在设置图书的CN，在传给前端
        bookInfo.setStatusCN(BookStatus.getDescByCode(bookInfo.getStatus()).getDesc());
        return bookInfo;
    }

    public Integer updateBook(BookInfo bookInfo) {
        return bookMapper.updateBook(bookInfo);
    }
    /*
    * 删除图书
    * 和 updateBook用的是同一个mapper*/
    public Integer deleteBook(Integer bookId) {
        BookInfo bookInfo = new BookInfo();
        bookInfo.setId(bookId);
        bookInfo.setStatus(0);
        return bookMapper.updateBook(bookInfo);
    }

    public Integer batchDeleteBookByIds(List<Integer> ids) {
        return bookMapper.batchDeleteBookByIds(ids);
    }
}
